" Basic settings {{{
set encoding=utf-8
source $VIMRUNTIME/vimrc_example.vim
set autochdir
set number
set wildmenu
set wildmode=list:longest,full
set autowrite
set autowriteall
set noswapfile
set hidden
set undodir=~/.vim/undo
if !isdirectory(&undodir)
    call mkdir(&undodir, 'p', 0700)
endif
let mapleader = "'"
" Having longer updatetime (default is 4000 ms = 4s) leads to noticeable
" delays and poor user experience
set updatetime=300
" Always show the signcolumn, otherwise it would shift the text each time
" diagnostics appear/become resolved
set signcolumn=yes
" 使用字符编码次序
set fileencodings=ucs-bom,utf-8,gb18030,latin1
"如果设 set scrolloff=5，会导致只要屏幕能滚动，光标就移不到最上面的 4 行和最下面的 4 行里，因为一移进去屏幕就会自动滚动。这同样也会导致 H 和 L 的功能发生变化：本来是移动光标到屏幕的最上面和最下面，现在则变成了移动到上数第 6 行和下数第 6 行，和没有这个设定时的 6H 与 6L 一样了。
set scrolloff=0
" 文件已经打开时自动切换到已经打开的 Vim 窗口上
if v:version >= 800
  packadd! editexisting
endif
" Give more space for displaying messages.
" set cmdheight=2
" Don't pass messages to |ins-completion-menu|.
set shortmess+=c
" }}}
" tab settings {{{
set expandtab "制表符展开成空格
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set smartindent
" }}}
" search settings {{{
set hlsearch
nnoremap <silent> <C-l> :<C-u>nohlsearch<CR><C-l>
hi Search ctermbg=LightGreen ctermfg=Red
set incsearch
" }}}
" Mappings {{{
inoremap <c-u> <esc>viwUea
" edit my vimrc file
nnoremap <leader>ev :vsplit $MYVIMRC<cr>
" source my vimrc file
nnoremap <leader>xv :source $MYVIMRC<cr>
" 替换光标下单词的键映射
nnoremap <Leader>v viw"0p
vnoremap <Leader>v    "0p
" }}}
" yaml file settings {{{
autocmd FileType yaml setlocal tabstop=2 shiftwidth=2 softtabstop=2
" }}}
" Terminal settings {{{
" disable line number in terminal
autocmd TerminalOpen * setlocal nonumber norelativenumber
" }}}
" Vimscript file settings {{{
augroup filetype_vim
	autocmd!
	autocmd FileType vim setlocal foldmethod=marker
augroup END
" }}}
" c lang configuration {{{
" cinoptions 可以精调 C 风格缩进的方式；上面 :0 表示 switch 下面的 case 语句不进行额外缩进，g0 代表作用域声明（public:、private: 等）不额外缩进，(0 和 w1 配合代表没结束的圆括号里的内容折行时不额外缩进。
au FileType c,cpp,objc  setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=4 cinoptions=:0,g0,(0,w1
" c_space_errors 用来标记空格错误，包括了 tab 字符前的空格和行尾空格，这样设置之后 Vim 会把这样的空格加亮出来。
let g:c_space_errors = 1
" c_gnu 激活 GNU 扩展，这在 Unix 下一般是必要的。
let g:c_gnu = 1
" c_no_cformat 不对 printf 或类似函数里的的格式化字串进行加亮。
let g:c_no_cformat = 1
" c_no_curly_error 也是为了让一些 GNU 的扩展能够正确显示，不会被标志成错误。
let g:c_no_curly_error = 1
" Vim 默认会在注释中加亮字符串和数字（c_comment_strings）。虽然这种加亮有时候也能派上用场，但这种配置下我常常在注释中见到错误的加亮，所以我还是关闭这个功能。
if exists('g:c_comment_strings')
  unlet g:c_comment_strings
endif
" }}}
" Man plugin configuration {{{
" 启用 man 插件
source $VIMRUNTIME/ftplugin/man.vim
set keywordprg=:Man
" 按q键退出Vim help
" au FileType help  nnoremap <buffer> q <C-W>c
" Use new tab for man page
let g:ft_man_open_mode = 'tab'
" }}}

